package com.atguigu.gmall.product.controller;

import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.product.entity.BaseAttrInfo;
import com.atguigu.gmall.product.entity.BaseAttrValue;
import com.atguigu.gmall.product.service.BaseAttrInfoService;
import com.atguigu.gmall.product.service.BaseAttrValueService;
import com.atguigu.gmall.product.vo.SaveAttrInfoVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RequestMapping("/admin/product")
@RestController
public class BaseAttrController {

    @Autowired
    BaseAttrInfoService baseAttrInfoService;
    @Autowired
    BaseAttrValueService baseAttrValueService;

// http://api.gmall.com/admin/product/attrInfoList/{category1Id}/{category2Id}/{category3Id}

    //根据前端请求，查询这些分类下的所有平台属性名和值
    @GetMapping("/attrInfoList/{c1id}/{c2id}/{c3id}")
    public Result attrInfoList(@PathVariable("c1id") Long c1id,
                               @PathVariable("c2id") Long c2id,
                               @PathVariable("c3id") Long c3id){

        List<BaseAttrInfo> infos = baseAttrInfoService
                .attrInfoList(c1id,c2id,c3id);
        return Result.ok(infos);
    }


    /*
     * 在前端用json发送数据
     * 使用GsonFormatPlus生成vo，来接受数据
     * */
    //     保存键按钮的作用： 保存修改二合一

    @PostMapping("saveAttrInfo")
    public Result saveAttrInfo(@RequestBody SaveAttrInfoVO vo){

        if (vo.getId() == null) {
            baseAttrInfoService.saveAttrInfo(vo);
        } else {
            baseAttrInfoService.updateAttrInfo(vo);
        }
        return Result.ok();
    }


//    查询平台的属性值
    @GetMapping("getAttrValueList/{attrId}")
    public Result getAttrValueList(@PathVariable("attrId") Long attrId) {

        List<BaseAttrValue> list = baseAttrValueService.lambdaQuery()
                //        该方法使用 attrId 属性作为查询条件对 BaseAttrValue 实体进行筛选，
                //        相当于 SQL 中的 WHERE attrId = ?
                .eq(BaseAttrValue::getAttrId, attrId)
                //list() 方法执行查询并返回符合条件的结果列表
                .list();
        return Result.ok(list);
    }

}
